﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;

delegate void Del(string str);
namespace console.demo.senior
{
    /**
     * 委托类似于c++函数指针,委托完全面向对象,委托会封装对象实例和方法
     * 委托允许将方法作为参数进行传递
     * 委托可用于定义回调方法
     * 委托可以连接在一起;例如可对一个事件调用多个方法
     * 方法不必与委托类型完全匹配,
     * 使用lambda表达式可用更简练的编写内联代码块
     */
    public class DelegateDemo
    {
        static void Notify(string name)
        {
            Console.WriteLine(name);
        }
        /// <summary>
        /// 使用委托
        /// </summary>
        public static void get(string name)
        {
            //使用匹配签名声明委托并声明方法
            Del del = new Del(Notify);
            //将方法组分配给委托
            Del del1 = Notify;
            //声明匿名方法
            Del del2 = delegate (string name)
            {
                Console.WriteLine(name);
            };
            //使用lambda表达式
            Del del3 = name =>
            {
                Console.WriteLine(name);
            };
        }
    }
}
